package com.xique.park.bean.domain;

import java.util.Date;
import java.util.List;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import com.xique.common.core.annotation.Excel;
import lombok.EqualsAndHashCode;

/**
 * 车辆对象 t_park_car
 *
 * @author xique
 * @date 2021-12-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class ParkCar extends ParkBaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 自动增量
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 车场ID
     */
    private Long parkId;

    /**
     * 授权车库，多个车库用英文逗号隔开“,”
     */
    private String garageIds;

    /**
     * 授权通道，多个通道用英文逗号隔开“,”
     */
    private String laneIds;

    /**
     * 车牌号
     */
    private String plate;

    /**
     * 卡号
     */
    private String cardNo;

    /**
     * 车型（1-小车 2-大车 3-超大车 4-摩托车 5-其它车）
     */
    @Excel(name = "大小车型(必选)", readConverterExp = "1=小车,2=大车,3=超大车,4=摩托车,5=其它车", combo = {"小车", "大车", "超大车", "摩托车", "其它车"})
    private String carType;

    /**
     * 车位号
     */
    @Excel(name = "车位号(非必填)", prompt = "公共车位无需填写，私家车位可填")
    private String seatNo;

    /**
     * 车辆管理类型大类
     */
    @Excel(name = "车辆管理大类(必选)",
            width = 30,
            readConverterExp = "1=月卡类,2=登记临停类,3=邀请访客类,4=会员临停类,5=临停类,9=黑名单类,10=免费类",
            combo = {"月卡类", "登记临停类", "邀请访客类", "会员临停类", "临停类", "黑名单类", "免费类"})
    private String mngType;

    /**
     * 车辆管理类型ID
     */
    private Long mngTypeId;

    @TableField(exist = false)
    @Excel(name = "车辆管理类型名称(必填)", width = 30)
    private String mngTypeName;

    /**
     * 有效期开始日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date beginDate;

    /**
     * 有效期截止日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "有效期截止日期(必填)", width = 30, dateFormat = "yyyy-MM-dd", prompt = "日期格式：yyyy-MM-dd")
    private Date endDate;

    /**
     * 暂停开始日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date pauseBeginDate;

    /**
     * 暂停截止日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date pauseEndDate;

    /**
     * 剩余天数
     */
    private Long remainDays;

    /**
     * 车位数，默认是1，其他根据实际情况
     */
    @Excel(name = "车位数(必填)", cellType = Excel.ColumnType.NUMERIC, prompt = "默认为1，根据实际情况填写")
    private Integer spaces;

    /**
     * 多车多位用
     */
    @Excel(name = "车牌号码(必填)", prompt = "1、车牌必填;2、不允许空格;3、字母全部大写;4、多个车牌之间使用','（英文逗号）分割")
    private String bindPlates;

    /**
     * 车位性质 1-公共车位（计车位） 2-私家车位（不计车位）
     */
    @Excel(name = "车位性质(必选)", readConverterExp = "1=公共车位,2=私家车位", combo = {"公共车位", "私家车位"})
    private String seatType;

    /**
     * 押金，单位：分
     */
    private Long deposit;

    /**
     * 有效次数
     */
    private Long effectiveTimes;

    /**
     * 剩余有效次数
     */
    private Long remainEffectiveTimes;

    /**
     * 车主姓名
     */
    @Excel(name = "姓名(非必填)")
    private String userName;

    /**
     * 车主电话
     */
    @Excel(name = "电话(非必填)")
    private String phone;

    /**
     * 地址
     */
    @Excel(name = "地址(非必填)")
    private String address;

    /**
     * 状态（normal-启用 pause-停用）
     */
    @Excel(name = "状态(必选)", readConverterExp = "normal=启用,pause=停用", combo = {"启用", "停用"})
    private String status;

    /**
     * 微信openId
     */
    private String wechatOpenId;

    /**
     * 微信openId有效期开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date wechatBeginDate;

    /**
     * 微信openId有效期截止时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date wechatEndDate;

    /**
     * 创建人
     */
    private Long createUser;

    /**
     * 更新人
     */
    private Long updateUser;

    /**
     * 是否多位多车：Y：是，N：否
     */
    private String isMultSpaces;

    /**
     * 允许访客类型：1.不允许，2收费访客，3免费访客，用,分隔
     */
    private String visitorType;

    /**
     * 访客电话
     */
    private String visitorPhone;

    /**
     * 访客姓名
     */
    private String visitorName;

    /**
     * 应收金额
     */
    private Long mayFee;

    /**
     * 实收金额
     */
    private Long actualFee;

    /**
     * 支付方式
     */
    private String payType;

    /**
     * 业主id
     */
    private Long parkUserId;

    /**
     * 是否启用多车库的多位多车功能：Y:是，N:否
     */
    private String isGarageSpace;

    /**
     * 同步状态，是否同步
     */
    private Boolean syncStatus;

    /**
     * 永久状态，是否永久不过期
     */
    private Boolean foreverStatus;

    /**
     * 拉黑前的管理类型
     */
    private String oldMngType;

    /**
     * 拉黑前的管理类型小类ID
     */
    private Long oldMngTypeId;

    /**
     * 拉黑前的截止日期
     */
    private Date oldEndTime;

    /**
     * 拉黑前的车辆ID（多位多车用）
     */
    private Long oldId;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    private Integer isDataDeal;

    /**
     * 车库名
     */
    @Excel(name = "车库名(必填)")
    @TableField(exist = false)
    private String parkGarageName;

    /**
     * 是否储值：Y：是，N：否
     */
    @Excel(name = "是否储值(非必选)", readConverterExp = "Y=是,N=否", combo = {"是", "否"})
    private String isVal;

    /**
     * 余额，单位：分
     */
    @Excel(name = "余额(单位：分，非必填)", width = 30)
    private Long balance;

    /**
     * 备注信息
     */
    @Excel(name = "备注", width = 50)
    private String remark;

    @TableField(exist = false)
    private String isExpire;

    @TableField(exist = false)
    private int carConts;

    /**
     * 多个车牌的在场信息列表
     * 非数据库字段
     */
    @TableField(exist = false)
    private List<ParkOn> parkOnList;

    /**
     * 在场车辆数
     */
    @TableField(exist = false)
    private int onCarCount;

    /**
     * 剩余车位数
     */
    @TableField(exist = false)
    private int remainSpaceCount;

}
